# Как работает Tornado Cash?

Прежде чем погрузиться в руководства, объясняющие и упрощающие использование Tornado.Cash, приведем общий обзор глобального функционирования протокола.<br>

<figure><img src="https://docs.tornadoeth.cash/~gitbook/image?url=https%3A%2F%2F679099605-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FEtJYowcoUd8dyfwpjiol%252Fuploads%252FUEHlsK7tTuKhTGw6PFTJ%252FHowTornadoCashWorks.webp%3Falt%3Dmedia%26token%3Db7be18ab-a511-4ddb-be0c-aad9799382ea&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=77a5ae1c&#x26;sv=1" alt=""><figcaption></figcaption></figure>

**Глобальный обзор функционирования Tornado.Cash**

Чтобы добиться конфиденциальности,[Торнадо.Кэш](https://tornadoeth.cash/) **использует смарт-контракты, которые принимают депозиты токенов с одного адреса и позволяют их вывод с другого адреса** . Эти смарт-контракты работают как пулы, в которых смешиваются все депонированные активы. Как только средства выводятся по совершенно новому адресу из этих пулов, внутрисетевая связь между источником и местом назначения разрывается. Таким образом, выведенные криптоактивы анонимизируются. Пока токены находятся в пуле Tornado Cash, хранение остается в руках пользователей. Таким образом, пользователи имеют полный контроль над своими токенами.&#x20;

**Для традиционных пулов Tornado Cash с фиксированной суммой** :

* Когда пользователь помещает средства в пул (он же депозит), создается личная заметка. Эта личная заметка работает как личный ключ, позволяющий пользователю позже получить доступ к этим средствам. Чтобы вывести их, тот же пользователь может использовать другой адрес — старый или новый — и восстановить свои средства благодаря этому закрытому ключу.

**Для Tornado Cash Nova новый пул ETH с произвольными суммами и защищенными переводами** :

* Средства напрямую привязаны к определенному адресу кошелька. Нет никакой личной заметки или ключа. Пользователи могут получить доступ к своим средствам, подключившись к пулу по соответствующему адресу.
* Хранение осуществляется либо путем внесения токенов в пул, либо путем регистрации в пуле и получения защищенных переводов с другого адреса.

Надежность такого протокола напрямую связана с количеством его пользователей и размером пула. Чем больше пользователей вносят депозиты в пул, тем лучше. Однако для сохранения конфиденциальности и анонимности пользователь должен помнить о некоторых основных правилах, таких как:

* Использование ретранслятора для оплаты газа при выводе;
* Предоставление времени между внесением депозита и снятием средств;
* Смешивает свои средства с толпой, ожидая нескольких транзакций, прежде чем вернуть свои активы.

*Дополнительные рекомендации представлены в:* [*Советы, как сохранить анонимность*](https://docs-ru.tornadoeth.cash/generaly/sovety-po-sokhraneniyu-anonimnosti)*.*

**Вклад zk-SNARK и процесса хеширования**

Tornado.Cash использует краткий неинтерактивный аргумент знания с нулевым разглашением (также называемый zk-SNARK) для проверки и разрешения транзакций. Для обработки депозита Tornado.Cash генерирует случайную область байтов, вычисляет ее с помощью [Педерсен Хэш](https://iden3-docs.readthedocs.io/en/latest/iden3_repos/research/publications/zkproof-standards-workshop-2/pedersen-hash/pedersen.html) (поскольку это более дружелюбно к zk-SNARK), затем отправляет токен и хэш 20 MiMC в смарт-контракт. Затем контракт вставит его в дерево Меркла.&#x20;

Для обработки вывода одна и та же область байтов разделяется на две отдельные части: секрет **с** одной стороны и **обнулитель** с другой стороны. Обнулитель хешируется. Этот обнулитель представляет собой общедоступные входные данные, которые отправляются в цепочку для проверки с помощью смарт-контракта и данных дерева Меркла.&#x20;

Например, это позволяет избежать двойных расходов. Благодаря zk-SNARK можно доказать хэш 20 MiMC первоначального обязательства и обнулителя, не раскрывая никакой информации. Даже если обнулитель является общедоступным, конфиденциальность сохраняется, поскольку невозможно связать хешированный обнулитель с первоначальным обязательством.&#x20;

Кроме того, даже если информация о транзакции присутствует в корне Merkle, информация о точном пути Merkle, а затем и о местонахождении транзакции, по-прежнему остается конфиденциальной.&#x20;

Депозиты просты с технической точки зрения, но дороги в с точки зрения газа, поскольку им нужно вычислить хэш 20 MiMC и обновить дерево Меркла. С другой стороны, процесс вывода сложен, но дешевле, поскольку газ необходим только для хеш-нулификатора и доказательства с нулевым разглашением.
